In a packetized communications environment, such as a storage system, network system, and/or the like, it is often desirable to classify incoming packets to be processed by a device into different priorities. By prioritizing packets, the device can provide a specified quality of service (QoS) for certain types of packets without including a lot of excess bandwidth. In general, QoS refers to the latency in processing a packet. In particular, certain applications are more sensitive to delays in communications than other applications. As a result, the packets communicated from these applications should be processed at a higher priority than packets from other applications.
To this extent, in a storage system, a storage controller, such as an Internet Small Computer System Interface (iSCSI) storage controller, can include a plurality of queues, each of which corresponds to a priority. In this case, incoming packets comprise requests, and can be prioritized according to the type of request (e.g., a paging request can have a higher priority than a log request). Similarly, in a network system, a switch, router, host, or the like, can include a plurality of queues corresponding to varying priorities. In this case, the incoming packets include data and real-time data packets, such as those including streaming voice or video, can be processed at a higher priority than other non-real-time data packets, such as those including electronic mail (e-mail) or other data.
In any event, incoming packets from each queue are selected for processing according to a corresponding priority for the queue. Various approaches have been proposed for selecting a queue from which to select the next packet to be processed. A significant consideration is the amount of processing required to select the queue. In particular, a substantial amount of processing will slow the performance of the device for each message, thereby adversely impacting the overall communications rate for the network.
However, some of the approaches that require little processing frequently can lead to a queue being “starved” of bandwidth. In this case, one or more packets may be abandoned or dropped due to a threshold for a queue being exceeded. Additionally, other approaches do not provide an approach that can be scaled to easily accommodate any number of queues.
In view of the foregoing, a need exists to overcome one or more of the deficiencies in the related art.